/*
 * Copyright (C) Cátedra SAES-UMU 2011 <pedromateo@um.es>
 *
 * Android HCI Extractor is free software: you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public License as published
 * by the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * Android HCI Extractor is distributed in the hope that it will be
 * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 * See the GNU Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
package org.mmi.android.instrumentation.objectproxies;

import java.util.LinkedList;

/**
 * Base for object-proxy classes.
 * These classes are used to easily get some common
 * information from different objects with a common
 * super-class.
 * 
 * @author pedro mateo (pedromateo@um.es)
 *
 */
public abstract class BaseObjectProxy {

	/**
	 * Constructor.
	 */
	public BaseObjectProxy() {
	}
	
	///
	/// abstract methods
	///

	/**
	 * Returns the number of elements included in this object.
	 * @param o the object
	 * @return elements
	 */
	public abstract int getElements(Object o);
	
	/**
	 * Returns true if the object represents a question.
	 * @param o the object
	 * @return is question
	 */
	public abstract boolean isQuestion(Object o);

	/**
	 * Returns the number of concepts included in this object.
	 * @param o the object
	 * @return elements
	 */
	public abstract int getConcepts(Object o);

	/**
	 * Returns the number of noise elements included in this object.
	 * @param o the object
	 * @return elements
	 */
	public abstract int getNoise(Object o);

	/**
	 * Returns true if the object represents system feedback.
	 * @param o the object
	 * @return is feedback
	 */
	public abstract boolean isFeedback(Object o);


	/**
	 * List of classes adapted by this proxy.
	 */
	public abstract LinkedList<Class> getAdaptedClasses();

	///
	/// variables
	///

	protected Object object_;

}
